Similar Question
Solution Tips
方案一: 模拟
var monotoneIncreasingDigits = function(n) {
let s = n + '';
let cur = '';
let startIndex = 0;
let i = 0;
while (i < s.length - 1) {
if (s[i] < s[i + 1]) {
i++;
startIndex = i;
}
else if (s[i] === s[i + 1]) {
i++;
}
else {
cur += s.slice(0, startIndex);
s = s[startIndex] - 1 + Array.from({ length: s.length - startIndex - 1 }).fill('9').join('');
startIndex = 0;
i = 0;
}
}
cur += s;
return +cur;
};
方案二: 官解
var monotoneIncreasingDigits = function(n) {
const strN = n.toString().split('').map(v => +v);
let i = 1;
while (i < strN.length && strN[i - 1] <= strN[i]) {
i += 1;
}
if (i < strN.length) {
while (i > 0 && strN[i - 1] > strN[i]) {
strN[i - 1] -= 1;
i -= 1;
}
for (i += 1; i < strN.length; ++i) {
strN[i] = 9;
}
}
return parseInt(strN.join(''));
};
方案三: 从后往前遍历
var monotoneIncreasingDigits = function(n) {
n = n.toString()
n = n.split('').map(item => {
return +item
})
let flag = Infinity
for(let i = n.length - 1; i > 0; i--) {
if(n [i - 1] > n[i]) {
flag = i
n[i - 1] = n[i - 1] - 1
n[i] = 9
}
}
for(let i = flag; i < n.length; i++) {
n[i] = 9
}
n = n.join('')
return +n
};